 /**
    * 定时任务
    * 向服务器发起请求，查看是否需要下载视频。若有则下载到指定目录
    */

 "app"
 const { httpPostData_JSON, httpGetFile_Bytes, videoDir, jsDir, httpUploadErrMsg
 } = require("/sdcard/Download/js/config.js");
try{

    toast("检查是否正在执行其他脚本")
    log("检查是否正在执行其他脚本")
    var execList = engines.all();
    var execFlag = 0;
    execList.forEach(element => {
        if(element.source.toString().includes("request.js")){
            execFlag ++;
            // execArr.push(element)
        }
    });
    if(execFlag > 1){
        log("正在执行其他脚本，退出本脚本！")
        toast("正在执行其他脚本，退出本脚本！")
        httpUploadErrMsg("脚本冲突！")
        engines.myEngine().forceStop()
    }

    toast("开始下载视频")
    log("开始下载视频")
    // var config.videoDir = global_savePath;
    var flag = 0;

    /**
     * 先删除video文件夹和其下文件，再创建文件夹
     */
    {
        files.removeDir(videoDir)
        files.ensureDir(videoDir)
    }

    /**
     * 发起请求，查看是否有新视频
     * @param device.fingerprint
     * 使用res.body.json()接收返回值，返回值数据格式如res.json所示。
     * 接着根据返回值下载对应资源
     * problem : 直接下载会遇到视频无法被相册等识别。
     *      ->解决：在下载完毕后需要使用media.scanFile(path)
     * device.fingerprint
     */
    {

        var temp_json = httpPostData_JSON("/device/get/data");

        // toastLog("json = " + JSON.stringify(temp_json))
        if (temp_json.code == 0) {
            var temp_json_datas = temp_json.data;

            // temp_json_datas.medias = temp_json_datas.medias.replace(new RegExp("122.70.133.135", 'g'),"192.168.2.196")
            var fileName = temp_json_datas.resourceId

            // log("json = "+JSON.stringify(temp_json_datas))
            var mediasJsons = JSON.parse(temp_json_datas.medias);

            //将数据data写入本地，以供上传脚本文件获取
            files.write(jsDir + "data.txt", JSON.stringify(temp_json_datas))
            if(files.exists(jsDir + "data.txt")){

            }else{
                toast("写入数据文本失效！")
            }
            
            for (var n = 0; n < mediasJsons.length; n++) {
                var item = mediasJsons[n];
                var resourceUrl = addPrefixToFileName(item.resource_url);
                // log("resourceurl = "+resourceUrl)
                httpGetFile_Bytes(resourceUrl, "video/" + fileName + ".mp4")
                media.scanFile(videoDir);
                flag = 1;
            }
            
            

        } else {
            toast("下载出错！！")
            console.info("出错：" + temp_json.msg)
        }




    }

    /**
     * upload
     * 执行config.jsDir目录下的上传脚本，等待一个脚本执行完毕后再执行下一个脚本。
     * TODO：设置脚本最长执行时间，超过时间则断开脚本，执行下一个。并发送错误信息
     */
    {
        if (flag === 1) {

            if(files.exists(jsDir + "finish")){
                files.remove(jsDir + "finish")
            }

            toastLog("下载成功，进入上传脚本执行")
            httpPostData_JSON("/device/upload/videoStatus",{
                "videoId" : temp_json_datas.id,
                "status" : "download"
            })
            // 扫描目录下的脚本，并执行
            // var jsFiles = files.listDir(jsDir, function (name) {
            //     return name.endsWith(".js") && files.isFile(files.join(jsDir, name));
            // });
            // 使用固定数组进行执行脚本
            var jsFiles = ["instagram_reels.js","facebook_reels.js","tiktok.js", "youtube.js"]
            
            var MAXCOUNT = 2;
            for (var i = 0; i < jsFiles.length; i++) {
                var MAX = 60 ;
                var count = 0;
                var flag = true
                var execId = engines.execScriptFile(jsDir + jsFiles[i]).id;
                log("开始执行："+jsFiles[i]);
                sleep(10000);
                // 如果还未执行完毕，等待执行完毕。每隔10s判断一次;10分钟若未执行完毕，则执行超时，中断脚本执行
                
                while(flag){
                    var enginesList = engines.all();
                    
                    for (var n = 0; n < enginesList.length; n++) {
                        if (execId == enginesList[n].id) {
                            if (count >= MAX) {
                                toast("超时！！退出脚本：" + jsFiles[i] + "的执行！")
                                httpUploadErrMsg("脚本：" + jsFiles[i] + "执行超时！")
                                flag = false;
                                break;
                            }
                            sleep(10000)
                            count++
                            break;
                        // 如果检查到最后一个脚本都没有结束
                        }else if(execId != enginesList[n].id && n==enginesList.length -1 ){
                            flag = false
                        } 
                        
                    }
                    
                }


                if(files.exists(jsDir + "finish")){
                    MAXCOUNT = 3;
                    log("存在finish")
                    files.remove(jsDir + "finish");
                    
                // 若上传失败不超过三次，则继续重新上传
                }else if(MAXCOUNT > 0 ){
                    MAXCOUNT --;
                    i--;

                // 上传失败，记录信息
                }else if(jsFiles[i] !== "config.js"){
                    httpPostData_JSON("/device/upload/videoStatusErr",{
                        "videoId" : temp_json_datas.id,
                        "name" : jsFiles[i]
                    })
                    MAXCOUNT = 3;
                }

                toast("退出脚本：" + jsFiles[i])
                sleep(1000)
            }
            httpPostData_JSON("/device/upload/videoStatus",{
                "videoId" : temp_json_datas.id,
                "status" : "upload"
            })
        } else {
            toast("下载失败，不进入上传脚本的执行")
            console.log("下载失败，不进入上传脚本的执行")
        }


    }

    
}catch(e){
    toast("上传脚本失败！")
    log(e)
    httpUploadErrMsg("脚本执行错误：request脚本"+" => "+e)
}

/**
     * 正则表达式，将url的名称前加一个h-，变成处理后的视频
     * @param {string} url 
     * @returns 
     */
function addPrefixToFileName(url) {
    // 使用正则表达式匹配URL中的最后一个斜杠后的部分
    return url.replace(/\/([^\/]+)$/, '/h-$1');
}